using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using CapaDatos;

namespace CapaNegocio
{
    public class Usuario: IBaseDeDatos
    {
        #region atributos
        private TipoDoc tipoDoc;
        private String nroDoc;
        private String nombre;
        private String apellido;
        private Perfil perfil;
        private String mail;
        private String telefono;
        private int cambiarPass;
        private String pass;
        #endregion

        #region getters y setters
        public String NroDoc
        {
            get { return nroDoc; }
            set { nroDoc = value; }
        }

        public String Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        public String Apellido
        {
            get { return apellido; }
            set { apellido = value; }
        }

        public Perfil Perfil
        {
            get { return perfil; }
            set { perfil = value; }
        }

        public String Mail
        {
            get { return mail; }
            set { mail = value; }
        }

        public String Telefono
        {
            get { return telefono; }
            set { telefono = value; }
        }

        public int CambiarPass
        {
            get { return cambiarPass; }
            set { cambiarPass = value; }
        }

        public String Pass
        {
            get { return pass; }
            set { pass = value; }
        }

        public TipoDoc TipoDoc
        {
            get { return tipoDoc; }
            set { tipoDoc = value; }
        }
        #endregion

        #region metodos estaticos
        public static Usuario ingresarSistema(int idTipo, string pUser, string pPass)
        {
            ArrayList datos = ServidorDatos.ingresarSistema(idTipo,pUser, pPass);
            Usuario usuario = null;
            if (datos.Count != 0)
            {
                usuario = new Usuario();
                usuario.buildObject((ArrayList)datos[0]);
            }
            
            return usuario;
        }

        public static bool crearUsuario(ArrayList datos)
        {
            return ServidorDatos.registrarUsuario(datos);
        }

        #endregion

        #region metodos de instancia
            public bool cambiarClave(string pNuevaClave)
            {
                return ServidorDatos.cambiarClave(nroDoc, pNuevaClave);
            }

            public bool modificarUsuario(ArrayList datos)
            {
                return ServidorDatos.modificarUsuario(datos);
            }

            public bool eliminarUsuario(String pDni)
            {
                return ServidorDatos.eliminarUsuario(pDni);
            }

            public bool eliminarUsuario()
            {
                return ServidorDatos.eliminarUsuario(TipoDoc.Codigo, nroDoc);
            }


            public bool modificarPerfil(int codPerfil)
            {
                return ServidorDatos.modificarPerfil(codPerfil, nroDoc);
            }

        #endregion

        #region clientes
        public Usuario() 
        {
            nroDoc = "";
            nombre="";
            apellido="";
            perfil=new Perfil();
            mail="";
            telefono="";
            cambiarPass=1;
            pass="";

        }
        #endregion

        #region IBaseDeDatos Members
       

        public void buildObject(ArrayList lista)
        {
            this.nroDoc = lista[0].ToString();
            this.nombre = lista[1].ToString();
            this.apellido = lista[2].ToString();
            this.mail = lista[3].ToString();
            this.Telefono = lista[4].ToString();
            ArrayList list = ServidorDatos.buscarPerfil(Convert.ToInt32(lista[5].ToString()));
            Perfil perfil = new Perfil();
            perfil.buildObject((ArrayList)list[0]);
            this.perfil = perfil;
            this.CambiarPass = Convert.ToInt32(lista[6].ToString());
            this.Pass = lista[7].ToString();
            this.TipoDoc = TipoDoc.buscarTipoDoc(Convert.ToInt32(lista[8].ToString()));
        }

        #endregion


        public static Usuario buscarUsuario(string tipo, string numero)
        {
            ArrayList usuario = ServidorDatos.buscarUsuario(tipo,numero);
            Usuario u = null;
            if (usuario.Count == 1)
            {
                u = new Usuario();
                u.buildObject((ArrayList)usuario[0]);  
            }
            return u;
        }

        public static Usuario buscarUsuario(int tipo, string numero)
        {
            ArrayList usuario = ServidorDatos.buscarUsuario(tipo, numero);
            Usuario u = null;
            if (usuario.Count == 1)
            {
                u = new Usuario();
                u.buildObject((ArrayList)usuario[0]);
            }
            return u;
        }

        public static List<Usuario> buscarUsuarios()
        {
            ArrayList usuariosBD = ServidorDatos.buscarUsuarios();
            List<Usuario> usuarios = new List<Usuario>();
            for (int i = 0; i < usuariosBD.Count; i++)
            {
                Usuario o = new Usuario();
                o.buildObject((ArrayList)usuariosBD[i]);
                usuarios.Add(o);
            }
            return usuarios;
        }

        public string TipoYNumDoc
        {
            get { return tipoYNum(); }
        }

        public string tipoYNum()
        {
            return TipoDoc.Nombre + " - " + nroDoc;
        }
    }
}